كيفية بناء مخطط شبكي باستخدام CSS: دليل شامل ومفصل
في عالم تصميم وتطوير الويب، يُعتبر مخطط الشبكة (CSS Grid Layout) من أكثر الأدوات قوة ومرونة لبناء تخطيطات الصفحات بطريقة منظمة وفعالة. تتيح هذه التقنية للمطورين إمكانية إنشاء تصاميم شبكية معقدة بطريقة سهلة وواضحة، مع تحكم كامل في ترتيب العناصر، أحجامها، وتوزيعها ضمن الصفحة. في هذا المقال، سنناقش بشكل موسع كل ما يتعلق بمفهوم مخطط الشبكة باستخدام CSS، بدءًا من المفاهيم الأساسية وحتى التقنيات المتقدمة، مع أمثلة توضيحية وجداول تلخص خصائص الاستخدام.
مقدمة عن CSS Grid Layout
ظهرت تقنية CSS Grid كجزء من مواصفات CSS الحديثة لتوفير طريقة مخصصة لبناء التخطيطات ثنائية الأبعاد (ثنائية المحاور: صفوف وأعمدة) على صفحات الويب. قبل ظهور هذه التقنية، كانت التصاميم تعتمد على طرق غير مرنة مثل استخدام الجداول، أو التقنيات الأقدم مثل الـFlexbox التي تدعم المحور الواحد فقط.
ميزة CSS Grid تكمن في قدرتها على تقسيم الصفحة إلى مناطق متناسقة من خلال شبكة تحتوي على صفوف وأعمدة، مما يسهل وضع العناصر ضمن هذه المناطق والتحكم بتوزيعها بدقة.
المفاهيم الأساسية لمخطط الشبكة في CSS
لبناء مخطط شبكي باستخدام CSS، يجب فهم المصطلحات والخصائص الأساسية التي توفرها هذه التقنية:
-
الشبكة (Grid Container): هو العنصر الحاوي الذي يطبق عليه الخاصية
display: grid;أوdisplay: inline-grid;. يحتوي هذا العنصر على العناصر الفرعية (Grid Items). -
العناصر الشبكية (Grid Items): هي العناصر الفرعية داخل الحاوية الشبكية والتي يتم وضعها في خلايا الشبكة.
-
الصفوف (Rows): تقسيم الشبكة أفقيًا إلى صفوف.
-
الأعمدة (Columns): تقسيم الشبكة عموديًا إلى أعمدة.
-
المناطق الشبكية (Grid Areas): مناطق مخصصة يمكن تسميتها ضمن الشبكة لاستدعائها وترتيب العناصر ضمنها.
خطوات بناء مخطط شبكي باستخدام CSS
1. تحديد الحاوية الشبكية
أول خطوة هي تحديد العنصر الذي سيكون الحاوية الشبكية عبر:
css.container {
display: grid;
}
تغيير القيمة إلى inline-grid يجعل الحاوية تظهر كعنصر سطري، لكن غالبًا ما تستخدم grid للحصول على تصميم بلوكي.
2. تحديد عدد الصفوف والأعمدة
تستخدم خاصية grid-template-columns و grid-template-rows لتحديد عدد الأعمدة والصفوف وأحجامها، فمثلًا:
css.container {
display: grid;
grid-template-columns: 100px 200px 100px;
grid-template-rows: 50px 100px;
}
في هذا المثال:
-
الشبكة مقسمة إلى 3 أعمدة بعرض 100 بكسل، 200 بكسل، 100 بكسل.
-
الشبكة تحتوي على صفين بارتفاع 50 بكسل و100 بكسل.
3. تحديد المسافات بين الصفوف والأعمدة
خاصيتي grid-column-gap و grid-row-gap أو المختصرة gap تحدد الفجوات بين الأعمدة والصفوف:
css.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px 20px; /* 10 بكسل بين الصفوف، 20 بين الأعمدة */
}
-
1frتعني جزء من المساحة المتاحة (fraction unit). -
gapهي الطريقة الأكثر شيوعًا وحداثة لتحديد الفجوات.
4. توزيع العناصر داخل الشبكة
عند وضع العناصر داخل الحاوية، يتم ترتيبها تلقائيًا بحسب التسلسل داخل DOM، لكن يمكن تخصيص مكان كل عنصر باستخدام خاصيتي grid-column و grid-row:
css.item1 {
grid-column: 1 / 3; /* يبدأ من العمود 1 إلى العمود 3 */
grid-row: 1 / 2; /* في الصف الأول */
}
.item2 {
grid-column: 3 / 4;
grid-row: 1 / 3;
}
هذا يسمح بتحديد العنصر الذي يمتد على أكثر من عمود أو صف.
5. استخدام المناطق الشبكية (Grid Areas)
لإنشاء تخطيطات معقدة يمكن تعريف أسماء للمناطق داخل الشبكة باستخدام grid-template-areas:
css.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: 100px 200px;
grid-template-areas:
"header header header"
"sidebar content ads";
}
.header {
grid-area: header;
}
.sidebar {
grid-area: sidebar;
}
.content {
grid-area: content;
}
.ads {
grid-area: ads;
}
بهذا الشكل، يتم تخصيص كل عنصر للمساحة المسماة الخاصة به ضمن الشبكة، مما يسهل التحكم في التخطيط بدون الحاجة لتحديد الأعمدة والصفوف بدقة.
المقارنة بين وحدات القياس في CSS Grid
| الوحدة | الوصف | الاستخدام الشائع |
|---|---|---|
| px (بكسل) | وحدة ثابتة تمثل عدد البكسلات | لتحديد أحجام دقيقة وثابتة |
| % (نسبة مئوية) | نسبة من حجم العنصر الحاوي | لتصاميم متجاوبة |
| fr (Fraction) | جزء من المساحة المتاحة داخل الحاوية الشبكية | لتقسيم المساحة بشكل نسبي |
| auto | يعين الحجم بناءً على محتوى العنصر | للحجم التلقائي حسب المحتوى |
| min-content | أصغر حجم ممكن للعنصر دون قص المحتوى | لتوفير مساحة ملائمة للمحتوى |
| max-content | أكبر حجم ممكن للعنصر بناءً على محتواه | لتوسيع العنصر بحسب المحتوى |
خصائص هامة متعلقة بمخطط الشبكة
1. justify-items و align-items
تحدد هذه الخصائص محاذاة العناصر داخل خلايا الشبكة:
-
justify-items: محاذاة أفقية (يسار، وسط، يمين، تمديد). -
align-items: محاذاة عمودية (أعلى، وسط، أسفل، تمديد).
css.container {
justify-items: center;
align-items: start;
}
2. justify-content و align-content
تتحكم هذه الخصائص في محاذاة الشبكة ككل داخل الحاوية عندما تكون المساحة أكبر من الشبكة نفسها:
-
justify-content: المحاذاة الأفقية. -
align-content: المحاذاة العمودية.
مثال:
css.container {
justify-content: space-between;
align-content: center;
}
3. grid-auto-flow
تحدد كيفية ملء الخلايا تلقائيًا إذا لم تُحدد المواقع:
-
row(افتراضي): يملأ الشبكة صفًا صفًا. -
column: يملأ الشبكة عمودًا عمودًا. -
dense: يحاول ملء الفراغات لتجنب وجود فجوات في الشبكة.
css.container {
grid-auto-flow: dense;
}
بناء تخطيط شبكي متجاوب باستخدام CSS Grid
واحدة من أكبر مزايا CSS Grid هي سهولة تطبيق تصميمات متجاوبة (Responsive Design). يمكن تعديل عدد الأعمدة والصفوف وحجمها بناءً على حجم الشاشة باستخدام خاصية Media Queries.
مثال عملي:
css.container {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 15px;
}
@media (max-width: 768px) {
.container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 480px) {
.container {
grid-template-columns: 1fr;
}
}
بهذا الشكل، تتحول شبكة ذات 4 أعمدة إلى 2 عمود على الشاشات المتوسطة، ثم إلى عمود واحد على الشاشات الصغيرة، مما يجعل التخطيط مناسبًا لكل الأجهزة.
مثال عملي لبناء صفحة رئيسية بسيطة باستخدام CSS Grid
html<div class="container">
<header class="header">رأس الصفحةheader>
<nav class="nav">القائمةnav>
<main class="main">المحتوى الرئيسيmain>
<aside class="sidebar">الشريط الجانبيaside>
<footer class="footer">تذييل الصفحةfooter>
div>
css.container {
display: grid;
grid-template-columns: 1fr 3fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header"
"nav main"
"footer footer";
gap: 10px;
height: 100vh;
}
.header {
grid-area: header;
background-color: #8e44ad;
color: white;
padding: 20px;
}
.nav {
grid-area: nav;
background-color: #3498db;
color: white;
padding: 20px;
}
.main {
grid-area: main;
background-color: #2ecc71;
color: white;
padding: 20px;
}
.footer {
grid-area: footer;
background-color: #e67e22;
color: white;
padding: 20px;
}
في هذا المثال:
-
يتم تقسيم الصفحة إلى رأس، قائمة جانبية، محتوى رئيسي، وتذييل.
-
كل عنصر موضوع في المنطقة الخاصة به.
-
تتيح الشبكة ترتيبًا مرنًا وسهل التعديل.
مزايا CSS Grid على تقنيات التخطيط الأخرى
| الميزة | CSS Grid | Flexbox | الجداول التقليدية |
|---|---|---|---|
| دعم التخطيطات ثنائية الأبعاد | نعم | لا (محور واحد فقط) | نعم |
| التحكم في الصفوف والأعمدة | دقيق جداً | محدود | محدود |
| سهولة إنشاء مناطق وتسميتها | متاحة عبر grid-template-areas |
غير متاحة | غير متاحة |
| دعم المساحات الفارغة داخل التخطيط | نعم | محدود | يعتمد على تصميم الجدول |
| الاستجابة للتصاميم المتجاوبة | ممتاز | جيد | محدود |
الاعتبارات والنصائح عند استخدام CSS Grid
-
دعم المتصفحات: يدعم معظم المتصفحات الحديثة CSS Grid، لكن يجب التأكد من الإصدارات القديمة التي قد تحتاج إلى حلول بديلة.
-
عدم الإفراط في التعقيد: رغم قوة CSS Grid، يجب تجنب بناء تخطيطات معقدة جدًا يصعب فهمها أو تعديلها لاحقًا.
-
التوافق مع Flexbox: يمكن استخدام CSS Grid وFlexbox معًا لتحقيق أقصى قدر من المرونة، حيث يستخدم Flexbox عادة للعناصر أحادية المحور داخل خلايا الشبكة.
-
التجربة العملية: تجربة الأكواد مباشرة عبر أدوات مثل CodePen أو JSFiddle تساعد على فهم طريقة عمل الشبكة وتعديلها بسهولة.
استخدام خاصية repeat() في تحديد الأعمدة والصفوف
خاصية repeat() تُستخدم لتكرار وحدات القياس لتبسيط كتابة الشفرات:
css.container {
grid-template-columns: repeat(3, 1fr);
}
تعني تقسيم الشبكة إلى 3 أعمدة متساوية.
تحليل جدول الخصائص الأساسية لمخطط الشبكة
| الخاصية | الوصف | القيم المحتملة | التأثير |
|---|---|---|---|
| display | تعيين العنصر كحاوية شبكية | grid, inline-grid |
تفعيل وضع الشبكة |
| grid-template-columns | تحديد أعمدة الشبكة مع الأحجام | قيم الطول، repeat(), auto, fr |
تقسيم الشبكة عمودياً |
| grid-template-rows | تحديد صفوف الشبكة مع الأحجام | قيم الطول، repeat(), auto, fr |
تقسيم الشبكة أفقياً |
| gap | تحديد المسافة بين الصفوف والأعمدة | قيم الطول (مثل px, em) | فراغات بين الخلايا |
| grid-column | تحديد موقع العنصر ضمن الأعمدة | start / end أو رقم عمود |
موضع العنصر عرضياً |
| grid-row | تحديد موقع العنصر ضمن الصفوف | start / end أو رقم صف |
موضع العنصر عمودياً |
| grid-template-areas | تعريف المناطق الشبكية المسماة | سلسلة نصية متعددة الأسطر | تسمية مناطق لتسهيل التخطيط |
| justify-items | محاذاة العناصر داخل الخلايا عرضياً | start, center, end, stretch |
ضبط محاذاة العناصر |
| align-items | محاذاة العناصر داخل الخلايا عمودياً | start, center, end, stretch |
ضبط محاذاة العناصر |
| justify-content | محاذاة الشبكة داخل الحاوية عرضياً | start, center, end, space-between |
ضبط محاذاة الشبكة |
| align-content | محاذاة الشبكة داخل الحاوية عمودياً | start, center, end, space-between |
ضبط محاذاة الشبكة |
| grid-auto-flow | تحديد كيفية ملء الخلايا تلقائياً | row, column, dense |
التحكم في تدفق العناصر |
الخاتمة
يُعد مخطط الشبكة باستخدام CSS من الأدوات الثورية التي غيرت طريقة بناء وتصميم صفحات الويب بشكل جذري. بفضل مرونته وسهولة استخدامه، يمكن للمطورين إنشاء تخطيطات متناسقة، متجاوبة، وعصرية مع التحكم الكامل في ترتيب وأحجام العناصر. في ظل التطورات المستمرة في تقنيات الويب، فإن إتقان CSS Grid يمثل خطوة أساسية لأي مطور يسعى للتميز في مجال تصميم الويب الحديث.
المصادر والمراجع
بهذا يكون المقال قد استعرض بشكل مفصل كل ما يتعلق ببناء مخطط شبكي باستخدام CSS، مع توضيح المفاهيم الأساسية، خصائص التحكم، وأمثلة عملية متنوعة.

